package com.tienon.message.thread.task;


import java.util.concurrent.Callable;

import org.apache.log4j.Logger;


/**
 * 发送表任务的Callable的继承类
 * 一条数据 一个发送表任务
 * @author xiuye
 *
 * @param <DATA>
 */
public abstract class SendMsgTask<DATA> implements Callable<Boolean> {

	protected static Logger log = Logger.getLogger(SendMsgTask.class);

	protected DATA data;	
	

	protected SendMsgTask(DATA data) {
		
		this.data = data;
	
		
	}
	

	/**
	 * 进行原始表数据预处理：
	 *  1.定位客户，识别客户渠道标识号 2.黑白名单处理 3.屏蔽敏感词 4.处理消息前后缀
	 * 
	 * @return
	 */
	protected abstract boolean prepareHandling();

	/**
	 * 消息内容拆分
	 * 
	 * @return
	 */
	protected abstract boolean splitMsg();

	/**
	 * 1.将拆分后的消息写入对应渠道的发送表(可能存在多条）
	 * 2.修改发送原始表状态为发送成功
	 * 
	 * @return
	 * @throws Exception 
	 */
	protected abstract boolean insertDataToMsgAndUpdateRawMsg() throws Exception;

	/**
	 * call方法有线程池调用
	 * 
	 */
	@Override
	public Boolean call() throws Exception {

		return this.prepareHandling() && this.splitMsg()
				&& this.insertDataToMsgAndUpdateRawMsg();
	}

}
